# 类名需要用大驼峰命名法
class Cat:
    def eat(self):
        """
        类种方法第一个参数必须为self
        :return:
        """
        print("%s 爱吃鱼" % self.name)

    def drink(self):
        print("drink")


# 创建对象调用方法
tom = Cat()
# tom.eat()
tom.drink()

# 对象的引用：哪个类创建+内存地址
# %d十进制 %x十六进制
print(tom)
print("%x" % id(tom))

# 可以直接在外部给对象添加属性，不推荐使用
tom.name = "水水"
print(tom.name)
tom.eat()
print("-" * 50)


# 在创建对象时：分配空间、为属性设置初始值调用__init__，该方法是对象的内置方法
class Person:
    def __init__(self, age):
        print("这是初始化方法,创建对象时自动调用")
        # 为类添加属性并指定初始值
        self.name = "slx"
        self.age = age

    def __del__(self):
        print("我要被销毁了")

    def __str__(self):
        return "[name=%s,age=%s]" % (self.name, self.age)


p = Person(1000)
print(p)
print(p.age)

# 对象内置方法和属性
# __del__:对象从内存销毁之前会自动调用__del__内置方法
# __str__:改变对象的输出方式
